阅读更多

2顶
0踩

行业应用

转载新闻 趣味算法图解,文科生都看懂了

2018-04-17 11:19 by 副主编 jihong10102006 评论(4) 有77826人浏览
编者按

IDEA 是由 SándorP. Fekete、Sebastian Morr 和 Sebastian Stiller 共同推出的图解算法系列。 它们最初是为 Sándor 在德国不伦瑞克工业大学开设的算法和数据结构讲座而设计的,作者希望它们能够有更广的用途,因此在网上发布了这个项目,希望能够帮助到教师、学生和有好奇心的人们。算法将会不断更新,可以访问页面了解更多信息:https://idea-instructions.com/

这些图片使用 Inkscape 绘制,可以使用任意一款向量图编辑软件来编辑它们。每个算法下面都有相应的图片下载地址。

快速排序

快速排序是一种“分而治之”的排序算法,通过随机选择“分区点”来避免出现最坏的情况。

  • 随机选择“分区点”。
  • 按照“分区点”的高度划条线。
  • 高出“分局点”的元素需要向右移动。
  • 低于“分区点”的元素需要向左移动。
  • 移动元素。
  • 重复上述的步骤分别对位于“分区点”两边的元素进行排序
。 下载地址:https://idea-instructions.com/quick-sort/

Bogo 排序

Bogo 排序也被称为“愚蠢的排序”,是一种非常简单但低效的排序算法,就是不断打乱元素的顺序,直到达到有序为止。

  • 查看元素是否有序。
  • 元素无序,那么就打乱顺序。
  • 再次检查元素是否有序。
  • 如果有序,排序成功,否则继续重复上述步骤。
下载地址:https://idea-instructions.com/bogo-sort/

二分查找

二分查找是一种快速从一个有序数组中找到某个元素位置的查找算法。这有点类似于猜数字游戏,通过不断问“目标数字是大于还是小于某个数”这样的问题,最终猜出目标数字。

  • 限定元素区间。
  • 待查找元素在区间的某个位置吗?
  • 不在。
  • 那么看看待查找元素是不是在当前位置的左边或者右边。
下载地址:https://idea-instructions.com/binary-search/

归并排序

归并排序也是一种“分而治之”的递归排序算法。

  • 把元素分成两部分,对每一个部分采用递归的归并排序。
  • 比较已经排好序的元素。
  • 合并已经排好序的元素。
  • 排序完毕。
下载地址:https://idea-instructions.com/merge-sort/

平衡二叉树

平衡二叉树是自平衡的二叉树变种,可以保证快速的查找、插入和删除操作。


以图中的平衡二叉树为例:
  • 左子节点比父节点小,而父节点比右子节点小。如果根节点左右子树的高度差超过 1,就变得不平衡。
  • 想知道树中是否包含了元素 11?11 比 10 大,那么就查找 10 的右子节点 12。11 比 12 小,所以就查找 12 的左子节点,12 的左子节点刚好是要查找的 11。同样的,树中是否包含了元素 8?8 比 10 小,那么就查找 10 的左子节点 6。8 比 6 大,那么就查找 6 的右子节点。6 的右子节点不存在,说明树中不存在元素 8。
  • 如何找到树中最小的元素?从根节点开始,一直顺着左子节点,找到最后一个叶子节点就是树中最小的元素。
  • 如何找到 10 的下一个元素?如果根节点刚好是 10,那么就从 10 的右子树中找到最小的那个元素。如果根节点不是 10,那么先找到 10,如果 10 没有右子节点,那么就一直往父节点找,直到找到比 10 大的元素为止。
  • 在树种加入 17 或删除 10,破坏了树的平衡,这个时候需要通过旋转恢复树的平衡。
下载地址:https://idea-instructions.com/avl-tree/

图遍历

图遍历算法会遍历图中所有可达的顶点,可以通过辅助数据结构来实现各种遍历,比如使用无序集合实现随机遍历,使用堆栈实现深度优先遍历,使用队列实现广度优先遍历。

  • 随机查找:选定一个顶点,把它放入一个无序集合中。从集合中取出一个顶点,访问该顶点,把该顶点的相邻顶点放入集合中,并把该顶点移出集合。重复这一过程,直到集合中的元素全部被遍历完毕。
  • 深度优先遍历:选定一个顶点压入栈中,把该顶点其中的一个相邻顶点也压入栈中。访问栈顶的顶点,如果该顶点没有其他相邻的顶点,就出栈。如果有其他相邻顶点,就把其中的一个相邻顶点压入栈中。重复这一过程,直到栈中的元素全部被遍历完毕。
  • 广度优先遍历:选定一个顶点,把该顶点的相邻顶点放进队列尾部。访问队列头部的顶点,把该顶点移出队列,如果该顶点有相邻顶点,就把相邻顶点放进队列尾部。重复这一过程,直到队列中的元素全部遍历完毕。
下载地址:https://idea-instructions.com/graph-scan/

一笔画

一笔画是一种 Fleury 算法,旨在优雅地找出图中的欧拉(Eulerian)路径。欧拉路径是图中的一条路径,刚好经过每条边,并且每条边只被访问一次。

  • 顶点度数表示该顶点有几条边。
  • 如果图中有且仅有两个顶点的度数为奇数,其他为偶数,或者不存在奇数度数的顶点,则存在欧拉路径。
  • 选定一个顶点开始画路径。
  • 如果存在两个以上的桥,那么可以走桥。如果只剩下一个桥,就不能走桥,除非只剩下桥可以走。
  • 如果还有没有走过的边,重复步骤 4。
  • 成功画出欧拉路径。
下载地址:https://idea-instructions.com/euler-path/
原文链接:https://idea-instructions.com/
  • 大小: 85 KB
  • 大小: 68.4 KB
  • 大小: 90 KB
  • 大小: 73.9 KB
  • 大小: 113.6 KB
  • 大小: 89.9 KB
  • 大小: 121.8 KB
  • 大小: 110.2 KB
来自: InfoQ
2
0
评论 共 4 条 请登录后发表评论
4 楼 mmmzzc 2018-07-02 16:51
果然文如标题啊~
文科生能看懂,我这个写了几年代码的码农,文学素养不够,真心看不懂~
3 楼 Miaonly 2018-04-20 09:50
图很形象,容易懂
2 楼 somefuture 2018-04-19 13:12
画的太有意思了
1 楼 jy03100000 2018-04-17 20:09
我个写bug的都看不懂

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • [收藏] 趣味算法图解,文科生都看懂了

    Fekete、Sebastian Morr 和 Sebastian Stiller 共同推出的图解算法系列。 它们最初是为 Sándor 在德国不伦瑞克工业大学开设的算法和数据结构讲座而设计的,作者希望它们能够有更广的用途,因此在网上发布了这个...

  • 趣味图解编程算法,文科生都看懂了

    快速排序是一种“分而治之”的排序算法,通过随机选择“分区点”来避免出现最坏的情况。 随机选择“分区点”。 按照“分区点”的高度划条线。 高出“分局点”的元素需要向右移动。 低于“分区点”的元素...

  • 趣味算法图解,文科生都看懂了(转)

    Fekete、Sebastian Morr 和 Sebastian Stiller 共同推出的图解算法系列。 它们最初是为 Sándor 在德国不伦瑞克工业大学开设的算法和数据结构讲座而设计的,作者希望它们能够有更广的用途,因此在网上发布了这个...

  • 书单 | 本本经典,学算法就从这里选了!

    最受读者喜爱的算法书Top10TOP3TOP1TOP2算法(第4版)作者:[美]塞奇威克(Robert Sedgewick),韦恩(Kevin Wayne)译者:谢路云算法经典大部头,一本让学渣看懂且学会、不打瞌睡的好书- 算法大家 Sedgewick、Wayne...

  • 这一年,这些书:2021年读书笔记

    无极就是事物的最原始状态,同时也是事物的最崇高状态:无极生太极,太极生两仪,两仪生四象,四象生八卦,八卦演万物,万物回无极。 现在的社会,对强者越来越狠,容忍度越来越低,各种道德审判让他们每天如履薄冰...

  • 优质的计算机专业书籍有哪些?

    5.300多幅算法手绘图解,文科生都能学的懂算法通关书。 操作系统 操作系统导论 主题突出,紧紧围绕操作系统的三大主题元素——虚拟化、并发和持久性。 以对话的方式引入背景,提出问题,进而阐释原理,启发动手实践...

  • 双十二大家都在买哪些书?这份书单请码住

    双十二来啦,这一天也在提醒着我们这一年就要结束了。虽然距离上次买买买才过去不久,...不踩坑、闭着眼睛买,本本都优秀。另外,12.12 图书促销已开启。京东除部分限价图书外,其余图灵图书全场满 100-50,手慢无~

  • 插入篇 |程序员进阶之推荐书目

    所以,入门的同学,我建议你找一些比较容易看的书来看,比如《大话数据结构》和《算法图解》。不要太在意书写得深浅,重要的是能不能坚持看完。 《大话数据结构》 这本书最大的特点是,它把理论讲得很有趣,不枯燥。...

  • 计算机程序设计基础解题与实验(c语言版) 蔡启先 实验5的答案,计算机程序设计基础...

    《21世纪高等学校计算机基础实用规划教材·计算机程序设计基础教程:C语言》以实际问题的求解过程为向导,突出从问题到算法,再到程序的一种思维过程,强调计算机求解问题的思路引导与程序设计思维方式的训练,重点...

  • python人工智能入门书籍推荐-有哪些关于人工智能的书籍可供推荐?

    从零修炼成一名合格的人工智能工程师注定需要很长的路要走。而书籍正是修炼路上的武林秘籍,金庸小说中,武林人士常常会为...本文就分别介绍这四个段位中所需要的“武林秘籍”,为了方便大家,每本书后都附上了电子...

  • 为什么数学不好,和语文有关系?

    ▲点击查看苏步青教授在担任复旦大学校长时曾经说过:“如果允许复旦大学单独招生考试,我的意见是第一堂课就考语文,考后就批卷子。不合格的,以下的功课就不要考了。语文你都不行,别的是学不通的...

  • 8月书讯 | 10 本新书上市,本本精选

    本月 10本新书,本本都是精选。

  • 各领域入门书籍推荐

    你看不懂《时间简史》?!那么就看这本书吧。如果科普都能写成这样,我根本不会读小说。我记得论坛有人做过精校文字版,推荐此版本电子书。 6 、《追寻记忆的痕迹》。 书中作者追溯了维也纳的儿时经历引起他对...

  • 关于__Federico Milano 的电力系统分析工具箱.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

  • mlab-upenn 研究小组的心脏模型模拟.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

  • 混合图像创建大师matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

  • 中序遍历二叉树-java版本

    在Java中,实现二叉树的中序遍历同样可以通过递归来完成。中序遍历的顺序是:首先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。 在这段代码中,Node类定义了二叉树的节点,BinaryTree类包含一个指向根节点的指针和inOrder方法,用于递归地进行中序遍历。printInOrder方法调用inOrder方法并打印出遍历的结果。 在Main类中,我们创建了一个示例二叉树,并调用printInOrder方法来输出中序遍历的结果。输出应该是:4 2 5 1 3,这表示中序遍历的顺序是左子树(4),然后是根节点(2),接着是右子树的左子树(5),然后是右子树的根节点(1),最后是右子树的右子树(3)。

  • 无头单向非循环链表的实现(SList.c)

    无头单向非循环链表的实现(函数定义文件)

  • 两个有序链表的合并pta

    "PTA" 通常指的是一种在线编程平台,例如“Pata”或者某些特定学校或组织的编程练习与自动评测系统。在这种平台或系统中,学生或程序员会提交代码来解决各种问题,然后系统会自动运行并评测这些代码的正确性。 当提到“两个有序链表的合并PTA”时,这通常意味着在PTA平台上解决一个特定的问题,即合并两个有序链表。具体任务可能是给定两个已按升序排序的链表,要求编写代码来合并这两个链表,形成一个新的有序链表。

Global site tag (gtag.js) - Google Analytics